# -*-coding:utf-8-*-
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
df: pd.DataFrame = pd.read_excel(r'..\book.xlsx', sheet_name=0, index_col=0, usecols=[0, 2, 4, 5])

"""数据排序
1.sort_values(by, axis=0, ascending=True, inplace=False, kind="quicksort", 
              na_position="last", ignore_index=False, key)
    按任一轴上的值排序
    -by：要排序的名称或名称列表
    -axis：0：按行排序。1：按列排序
    -ascending：True表示按升序，有多个排序条件的话可以用布尔值列表
    -kind：排序算法，"quicksort"（快速排序）、"mergesort"（归并排序）、"heapsort"（堆排序）
    -na_position：空值的位置，"fisrt"、"last"
    -ignore_index：True表示从0开始重设索引
    -key：自定义排序，自定义函数参数传入的是series
2.sort_index(axis=0, level, ascending=True, inplace=False, kind="quicksort", na_position="last", 
             sort_remaining=True, ignore_index=False, key)
    按索引排序
"""
df.sort_values('销量', ascending=False)  # 按销量倒序排序
df.sort_values(['分类', '销量'], ascending=[True, False])  # 按分类（主关键字，正序）和销量（从关键字，倒叙）排序
df.sort_values('书名', key=lambda x: x.str.lower())  # 按书名小写正序排序
df.sort_index()

"""数据排名
rank(axis=0,method="average",numeric_only,na_option="keep",ascending=True,pct=False)
    沿轴进行数据排名
    -axis：0：按行排名。1：按列排名
    -method：在具有相同值情况下的排名方法。"average"：平均排名。"max"：最大值排名。"min"：最小值排名。
             "first"：按值在原数据中出现的顺序排名。"dense"：密集排名，即相同值只占用一个排名
    -numeric_only：为True时表示只对数字行/列进行排名
    -na_option："keep"：空值的排名为NaN。"top"：将最低排名分配给空值。"bottom"：将最高排名分配给NaN值
    -ascending：True表示按升序，有多个排序条件的话可以用布尔值列表
    -pct：是否以百分比形式返回排名
"""
df['平均排名'] = df['销量'].rank(numeric_only=True)
df['最大值排名'] = df['销量'].rank(method='max')
df['密集排名'] = df['销量'].rank(method='dense')

